package com.yunxin.core.infra.persistence.converter;

import com.yunxin.core.domain.external.product.*;
import com.yunxin.core.domain.model.product.*;
import com.yunxin.core.infra.persistence.entity.page.query.result.ProductPriceInfoResult;
import com.yunxin.core.infra.persistence.entity.product.*;
import com.yunxin.core.infra.persistence.entity.product.query.result.ProductDetailFromPopupResult;
import com.yunxin.core.infra.persistence.entity.product.query.result.ProductFromPageElementResult;
import com.yunxin.core.infra.persistence.entity.product.query.result.ProductThrowInDetailResult;
import org.mapstruct.Mapper;

/**
 * @author zero°
 * @since 2023-07-12
 */
@Mapper(componentModel = "spring")
public interface ProductConverter {
    /**
     * do 转 entity
     * @param productAdvanceChargeRecordDO productAdvanceChargeRecordDO
     * @return ProductAdvanceChargeRecord
     */
    ProductAdvanceChargeRecord toProductAdvanceChargeRecord(ProductAdvanceChargeRecordDO productAdvanceChargeRecordDO);

    /**
     * result 转 entity
     * @param productDetailFromPopupResult productDetailFromPopupResult
     * @return ProductFromPopupDetail
     */
    ProductFromPopupDetail toProductFromPopupDetail(ProductDetailFromPopupResult productDetailFromPopupResult);

    /**
     * do 转 entity
     * @param productInfoDO productInfoDO
     * @return ProductOption
     */
    ProductOption toProductOption(ProductInfoDO productInfoDO);

    /**
     * result 转 entity
     *
     * @param result result
     * @return ProductThrowInDetail
     */
    ProductThrowInDetail toProductThrowInDetail(ProductThrowInDetailResult result);

    /**
     * bo 转 entity
     *
     * @param entity entity
     * @return ProductSimpleInfo
     */
    ProductSimpleInfo toProductSimpleInfo(ProductInfoDO entity);

    /**
     * do 转 entity
     *
     * @param productCustomConfigDO productCustomConfigDO
     * @return ProductCustomConfig
     */
    ProductCustomConfig toProductCustomConfig(ProductCustomConfigDO productCustomConfigDO);

    /**
     * do 转 entity
     *
     * @param productInfoDO productInfoDO
     * @return ProductCustomConfig
     */
    ProductInfo toProductInfo(ProductInfoDO productInfoDO);

    /**
     * result 转 entity
     *
     * @param result result
     * @return ProductPriceInfo
     */
    ProductPriceInfo toProductPriceInfo(ProductPriceInfoResult result);

    /**
     * result 转 entity
     *
     * @param productFromPageElementResult productFromPageElementResult
     * @return ProductFromPageElement
     */
    ProductFromPageElement toProductFromPageElement(ProductFromPageElementResult productFromPageElementResult);

    /**
     * do 转 entity
     *
     * @param productThrowInConfigDO productThrowInConfigDO
     * @return ProductThrowInConfig
     */
    ProductThrowInConfig toProductThrowInConfig(ProductThrowInConfigDOWithBLOBs productThrowInConfigDO);

    /**
     * do 转 entity
     *
     * @param productUnitPriceConfigDO productUnitPriceConfigDO
     * @return ProductUnitPriceConfig
     */
    ProductUnitPriceConfig toProductUnitPriceConfig(ProductUnitPriceConfigDO productUnitPriceConfigDO);
    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductAdvanceChargeRecordDO
     */
    ProductAdvanceChargeRecordDO  formProductAdvanceChargeRecord(ProductAdvanceChargeRecord entity);


    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductCustomConfigDO
     */
    ProductCustomConfigDO  formProductCustomConfig(ProductCustomConfig entity);

    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductInfoDO
     */
    ProductInfoDO  formProductInfo(ProductInfo entity);

    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductPromotionInfoDOWithBLOBs
     */
    ProductPromotionInfoDOWithBLOBs  formProductPromotionInfo(ProductPromotionInfo entity);


    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductThrowInConfigDO
     */
    ProductThrowInConfigDOWithBLOBs  formProductThrowInConfig(ProductThrowInConfig entity);

    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductUnitPriceConfigDO
     */
    ProductUnitPriceConfigDO  formProductUnitPriceConfig(ProductUnitPriceConfig entity);

    /**
     * entity 转 do
     *
     * @param entity entity
     * @return ProductUnitPriceConfigDO
     */
    ProductUnitPriceConfigVersionDO formProductUnitPriceConfigVersion(ProductUnitPriceConfigVersion entity);



}
